home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / btrees2.arc / BTOPEN.C < prev    next >
Text File  |  1984-12-14  |  2KB  |  52 lines

  1. /*    btopen        */
  2. #include <stdio.h>
  3. #include <btextern.h>
  4.  
  5. int btopen (gfilnam)
  6. char gfilnam[];
  7.  
  8.  
  9. /*    open an existing index file    */
  10. {
  11.     int i, *ip,occurs;
  12.     char *cp;
  13.  
  14.     if ((fp = fopen (gfilnam, "rwb")) == NULL)
  15.     BTSETCOD (NULL, NULL, 4);    /* set file open error */
  16.     if ((openkt = btopnkt () ) == -1)
  17.     BTSETCOD (NULL, NULL, 63);    /* set max files open */
  18.     if (!(btfilar[openkt].infobuf = 
  19.     (int *)calloc (LBLEN, sizeof (char))))
  20.      BTSETCOD (openkt, NULL, 7);    /* no memory */
  21.     if (!(btfilar[openkt].filbuf = 
  22.     (int *)calloc (LBLEN ,sizeof (char))))
  23.     BTSETCOD (openkt, NULL, 7);    /* no memory */
  24.  
  25. /*    now read index info record = # zero    */
  26.     btfilar[openkt].fdesc = fp;
  27.     if ((i = btread (openkt, 0)))
  28.     BTSETCOD (openkt, 0, i);    /* bad read */
  29.     movmem (btfilar[openkt].filbuf, btfilar[openkt].infobuf,LBLEN);
  30.  
  31. /*    initialize file control block    */
  32.     ip = btfilar[openkt].infobuf;    /* initialize pointer */
  33.     btfilar[openkt].handle = openkt;
  34.     strcpy (btfilar[openkt].curkey,"                ");
  35.     occurs = (LBLEN - 1) / (gkeylen + 3);
  36.     btfilar[openkt].ikeyptr = 
  37.     (char *)(btfilar[openkt].filbuf + occurs);
  38.     btfilar[openkt].root = *ip++;    /* 1 st integer */
  39.     btfilar[openkt].keylen = *ip;    /* 2 nd integer */
  40.     strcpy (btfilar[openkt].filnam, gfilnam);  /* copy file name */
  41.     btfilar[openkt].fdesc = fp;
  42.  
  43. /*    now read root record into filbuf */
  44.     if ((i = btread (openkt, btfilar[openkt].root)))
  45.     BTSETCOD (openkt, btfilar[openkt].root, i); /* bad read */
  46.  
  47. /*    give value of openkt to the world */
  48.     gfilhand = openkt;
  49.     return (0);
  50. }
  51. /*    end of btopen        */
  52.